﻿import cgi
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.api import users
from entities import *
from Entities import *
#from entities import NganhNgheNguoiDungEntities
#---------------------------
# Entities NganhNghe
#---------------------------
def Get(keyNguoiDung, LinhVucID=0, NganhNgheID=0):
    try:
        nguoidung = NguoiDung.get(db.Key(keyNguoiDung)) 
    except:
        return "Invalid Key"
    nganhnghe_list = []
    results = NganhNghe.all()
    if LinhVucID > 0:
        linhvuc = LinhVuc.get_by_id(LinhVucID)
        results = results.filter("LinhVucID", linhvuc)
    if keyNguoiDung != Entities.GetKey():
        nganhngheID_list = NganhNgheNguoiDungEntities.GetNganhNgheID(keyNguoiDung)
        results = results.filter("__key__ IN", nganhngheID_list)     
  
    if NganhNgheID > 0:
        nganhnghe = NganhNghe.get_by_id(NganhNgheID)
        nganhnghe_dict ={}
        nganhnghe_dict['NganhNgheID'] = nganhnghe.key().id()
        nganhnghe_dict['TenNganhNghe'] = nganhnghe.TenNganhNghe
        nganhnghe_dict['LinhVucID'] = nganhnghe.LinhVucID.key().id()
        nganhnghe_dict['TenLinhVuc'] = nganhnghe.LinhVucID.TenLinhVuc	
        nganhnghe_dict['HoatDong'] = 1		
        nganhnghe_list.append(nganhnghe_dict)        
    else:
        for nganhnghe in results:
            nganhnghe_dict ={}
            nganhnghe_dict['NganhNgheID'] = nganhnghe.key().id()
            nganhnghe_dict['TenNganhNghe'] = nganhnghe.TenNganhNghe
            nganhnghe_dict['LinhVucID'] = nganhnghe.LinhVucID.key().id()
            nganhnghe_dict['TenLinhVuc'] = nganhnghe.LinhVucID.TenLinhVuc
            nganhnghe_dict['HoatDong'] = 1	
            nganhnghe_list.append(nganhnghe_dict)
    tuple_nganhnghe = tuple(nganhnghe_list)  
    return tuple_nganhnghe
# lay tat ca linh vuc tu nganh nghe cua nguoi dung chon
def GetLinhVucID(keyNguoiDung, LinhVucID = 0):
    nganhnghe_list = NganhNgheNguoiDungEntities.GetNganhNgheID(keyNguoiDung)
    linhvuc_list = []
    for key in nganhnghe_list:
        nganhnghe = NganhNghe.get_by_id(key.id())
        if nganhnghe:
            if nganhnghe.LinhVucID.key() not in linhvuc_list:
                linhvuc_list.append(nganhnghe.LinhVucID.key())
    return linhvuc_list


def GetAll(keyNguoiDung, LinhVucID = 0):
    tuple_nnID = Get(keyNguoiDung,LinhVucID)
    nnID_list = []
    for nn in tuple_nnID:
        nnID_list.append(nn['NganhNgheID'])
    nganhnghe_list = []
    results = NganhNghe.all()
    if int(LinhVucID) > 0:
        linhvuc = LinhVuc.get_by_id(int(LinhVucID))
        results = results.filter("LinhVucID", linhvuc)
    for nganhnghe in results:
        nganhnghe_dict = {}
        nganhnghe_dict['NganhNgheID'] = nganhnghe.key().id()
        nganhnghe_dict['TenNganhNghe'] = nganhnghe.TenNganhNghe
        nganhnghe_dict['LinhVucID'] = nganhnghe.LinhVucID.key().id()
        nganhnghe_dict['TenLinhVuc'] = nganhnghe.LinhVucID.TenLinhVuc	
        if nganhnghe.key().id() in nnID_list:
            nganhnghe_dict['HoatDong'] = 1	
        else :
            nganhnghe_dict['HoatDong'] = 0	
        nganhnghe_list.append(nganhnghe_dict)
    tuple_nganhnghe = tuple(nganhnghe_list)  
    return tuple_nganhnghe    
    
def All(LinhVucID = 0):
    nganhnghe_list = []
    results = NganhNghe.all()
    if int(LinhVucID) > 0:
        linhvuc = LinhVuc.get_by_id(int(LinhVucID))
        results = results.filter("LinhVucID", linhvuc)
    for nganhnghe in results:
        nganhnghe_dict = {}
        nganhnghe_dict['NganhNgheID'] = nganhnghe.key().id()
        nganhnghe_dict['TenNganhNghe'] = nganhnghe.TenNganhNghe
        nganhnghe_dict['LinhVucID'] = nganhnghe.LinhVucID.key().id()
        nganhnghe_dict['TenLinhVuc'] = nganhnghe.LinhVucID.TenLinhVuc	
        nganhnghe_list.append(nganhnghe_dict)
    tuple_nganhnghe = tuple(nganhnghe_list)  
    return tuple_nganhnghe    
    
    
def Add_Admin(TenNganhNghe,LinhVucID):
    linhvuc = LinhVuc.get_by_id(LinhVucID)
    nganhnghe = db.GqlQuery("SELECT * FROM NganhNghe WHERE TenNganhNghe = :1 AND LinhVucID = :2",
                              TenNganhNghe, linhvuc)
    if linhvuc != None: 
        if nganhnghe.count() == 0:                      
            nganhnghe = NganhNghe(TenNganhNghe=TenNganhNghe,LinhVucID = linhvuc)
            nganhnghe.put()         
            return "Complete"
        else:
            return "Duplicate"
    else:
        return "Error LinhVucID"

def Add(keyNguoiDung, NganhNgheID):
    try:
        nguoidung = NguoiDung.get(db.Key(keyNguoiDung)) 
    except:
        return "Invalid Key"
    return NganhNgheNguoiDungEntities.Add(keyNguoiDung, NganhNgheID)     
        
def Update(keyNguoiDung, NganhNgheID, TenNganhNghe,LinhVucID):
    try:
        nguoidung = NguoiDung.get(db.Key(keyNguoiDung)) 
    except:
        return "Invalid Key"
    nganhnghe_update = NganhNghe.get_by_id(NganhNgheID)
    linhvuc = LinhVuc.get_by_id(LinhVucID)
    nganhnghe = db.GqlQuery("SELECT * FROM NganhNghe WHERE TenNganhNghe = :1 AND LinhVucID = :2",
                              TenNganhNghe, LinhVucID)
    if linhvuc != None and nganhnghe_update !=  None : 
        if nganhnghe.count() == 0:
            nganhnghe_update.TenNganhNghe = TenNganhNghe
            nganhnghe_update.LinhVucID = linhvuc
            nganhnghe_update.put()
            return "Complete"
        else:
            return "Duplicate"
    else:
        return "Error"

def Delete(keyNguoiDung, NganhNgheID = 0, LinhVucID = 0):
    try:
        nguoidung = NguoiDung.get(db.Key(keyNguoiDung)) 
    except:
        return "Invalid Key"
    results = NganhNghe.all()
    
    if int(NganhNgheID) > 0:
        NganhNgheNguoiDungEntities.Delete(keyNguoiDung, NganhNgheID)
    if int(LinhVucID) > 0:
        linhvuc = LinhVuc.get_by_id(int(LinhVucID))
        nganhnghekey_list = NganhNgheNguoiDungEntities.GetNganhNgheID(keyNguoiDung)
        results = results.filter("LinhVucID", linhvuc)
        nnlv_list = []
        for nn in results:
            nnlv_list.append(nn.key())
        for nn_del in nganhnghekey_list:
            if nn_del in nnlv_list:
                NganhNgheNguoiDungEntities.Delete(keyNguoiDung, nn_del.id())
    return "Complete"
        